// log4js级别：大小写不敏感
// ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF
const log4js = require('log4js')
const { isProd } = require('../config')

let stdout = isProd ? []: ['stdout'] // 生产环境不输出日志到控制台

log4js.configure({
	replaceConsole: true, // 如果为true，则程序中用console.log输出到控制台的信息，也会输出到日志文件中，且格式按照log4js的格式输出，如果为false，则console.log只会输出在控制台
	appenders: {
		stdout: {//控制台输出
			// type定义：
			// stdout: 设置是否在控制台打印日志
			// console: 将日志输出至控制台，这样可以方便开发人员在开发时接看到所有日志信息，在其他环境不建议设置
			// dateFile: 每天输出日志到新的文件（可以使用pattern配置文件名）
			// file: 输出日志到文件
			// logLevelFilter: 根据日志级别进行日志过滤
			type: 'stdout' 
		},
		req: {//请求日志
			type: 'dateFile',
			filename: 'logs/reqlog/',
			pattern: 'req-yyyy-MM-dd.log',
			alwaysIncludePattern: true // 如果为true，则每个文件都会按pattern命名，否则最新的文件不会按照pattern命名
		},
		err: {//错误日志
			type: 'dateFile',
			filename: 'logs/errlog/',
			pattern: 'err-yyyy-MM-dd.log',
			alwaysIncludePattern: true
		},
		oth: {//其他日志
			type: 'dateFile',
			filename: 'logs/othlog/',
			pattern: 'oth-yyyy-MM-dd.log',
			alwaysIncludePattern: true
		}
	},
	categories: {
		default: {
			appenders: stdout.concat(['req']),
			level: 'debug'
		},//appenders:采用的appender,取appenders项,level:设置级别
		error: {
			appenders: stdout.concat(['err']),
			level: 'error'
		},
		other: {
			appenders: stdout.concat(['oth']),
			level: 'info'
		}
	}
})

module.exports = log4js
 
// exports.getLogger = function (name) {// name取categories项
//     return log4js.getLogger(name || 'default')
// }
 
// exports.connectLogger = function (app, name) {// 用来与express结合
// 	app.use(
// 		log4js.connectLogger(log4js.getLogger(name || 'default'), {
// 			level: 'trace',
// 			format: '[:remote-addr :method :url :status :response-timems][:referrer HTTP/:http-version :user-agent]'//自定义输出格式
// 		})
// 	)
// }